package com.atguigu.recursion;

//递归解决8皇后问题
public class Queen8 {

    public static void main(String[] args) {
        check(0);
        System.out.println(cun);
    }

    static int max = 8;
    static int arr[] = new int[max];
    static int cun = 0;


    //check方法表示 参数n表示检查第n个皇后
    public static void check(int n){
        if (n==8){
            print();
            cun++;
            return;
        }
        for (int i=0;i<max;i++){
            arr[n] = i;
            if (judge(n)){
                check(n+1);
            }
        }
    }

    //判断第i个皇后，与之前的皇后是否冲突，比如在同一列，在同一斜线上
    //arr[i] == arr[j]判断俩个皇后是否在一列上
    //Math.abs(i-j) == Math.abs(arr[i]-arr[j])判断是否在一个斜线上，通过比较行长和列长是否相等
    public static boolean judge(int i){
        boolean flag = true;
        for (int j=0;j<i;j++){
            if (arr[i] == arr[j] || Math.abs(i-j) == Math.abs(arr[i]-arr[j])){
                flag = false;
            }
        }
        return flag;
    }

    public static void print(){
        for (int i=0;i<arr.length;i++){
            System.out.print(arr[i] + " ");
        }
        System.out.println();
    }

}
